perm filename PUP2[1,DBL]1 blob
sn#053744 filedate 1973-07-12 generic text, type T, neo UTF8
00100 (PROGN (LISPXPRIN1 (QUOTE "FILE CREATED ")
00200 T)
00300 (LISPXPRIN1 (QUOTE " 8-JUN-73 1:05:10")
00400 T)
00500 (LISPXTERPRI T))
00600 (LISPXPRINT (QUOTE PUPVARS)
00700 T)
00800 [RPAQQ PUPVARS
00900 (NEED REQUIRE W $PGM $UNUSEDVARS
01000 (FNS PURE RAMIFICATIONS REV2ELS CELLEQUAL LISTEQUAL
01100 REPLACECDR REPLACECAR MAKENULL RPLAC NEWCELL
01200 STORECVALUE CONSC SETQC TRANSITIVECLOSURE
01300 TRYANYTHINGANTISYMPARTIAL SIMPLEGOAL SOLVE SETUP
01400 INIT GETNEWLOCNAME DENYALL SERIESGOAL ORGOAL
01500 ANDGOAL XORGOAL BUILDPGM)
01600 (P (QSETUP PUPVARS]
01700 (RPAQQ NEED NIL)
01800 (RPAQQ REQUIRE NIL)
01900 (RPAQQ W
02000 (FNS RAMIFICATIONS REV2ELS CELLEQUAL LISTEQUAL REPLACECDR
02100 REPLACECAR MAKENULL RPLAC NEWCELL STORECVALUE CONSC SETQC
02200 TRANSITIVECLOSURE TRYANYTHINGANTISYMPARTIAL SIMPLEGOAL
02300 SOLVE SETUP INIT GETNEWLOCNAME DENYALL SERIESGOAL ORGOAL
02400 ANDGOAL XORGOAL BUILDPGM))
02500 (RPAQQ $PGM (TUPLE))
02600 (RPAQQ $UNUSEDVARS
02700 (CLASS U5 U4 U3 U2 U6 U7 U8 U9 U10 U11 U12 U13 U14 U15 U16 U17
02800 U1))
02900 (DEFINEQ
03000
03002 (PURE (QLAMBDA (TUPLE (TUPLE ←A ←←B) ←←C)
03004 (QIF (QEQUAL $A COMMENT) ELSE (QPROG () (PRIN1 $A) (PRINT $$B)))
03006 (QIF (QEQUAL $C (TUPLE)) ELSE (PURE (TUPLE $$C)))))
03008
03100 (RAMIFICATIONS
03200 [QLAMBDA
03300 (TUPLE ←A
03400 ←B)
03500 (QPROG (←L
03600 ←NEXT
03700 ←S1
03800 ←S2
03900 ←S3)
04000 (QMATCHQ ←L
04100 (QINSTANCES ←←ANY))
04200 B1
04300 (QATTEMPT (QMATCHQ (CLASS ←NEXT
04400 ←←L)
04500 $L)
04600 ELSE (QRETURN TRUE))
04700 B2
04800 [QATTEMPT (QMATCHQ (TUPLE ←←S1
04900 $A ←←S2
05000 $B ←←S3)
05100 $NEXT)
05200 THEN (QPROG NIL (QDELETE (TUPLE $$S1 $A $$S2 $B $$S3))
05300 (QASSERT (TUPLE $$S1 $B $$S2 $A $$S3))
05400 (GOTO B3))
05500 ELSE (QATTEMPT (QMATCHQ (TUPLE ←←S1
05600 $B ←←S2
05700 $A ←←S3)
05800 $NEXT)
05900 THEN (QPROG NIL
06000 (QDELETE (TUPLE $$S1 $B $$S2 $A $$S3))
06100 (QASSERT (TUPLE $$S1 $A $$S2 $B $$S3))
06200 (GOTO B3))
06300 ELSE (QATTEMPT (QMATCHQ (TUPLE ←←S1
06400 $A ←←S2)
06500 $NEXT)
06600 THEN (QPROG NIL
06700 (QDELETE (TUPLE $$S1 $A $$S2))
06800 (QASSERT (TUPLE $$S1 $B $$S2))
06900 (GOTO B3))
07000 ELSE (QATTEMPT (QMATCHQ (TUPLE ←←S1
07100 $B ←←S2)
07200 $NEXT)
07300 THEN (QPROG NIL
07400 (QDELETE (TUPLE $$S1 $B
07500 $$S2))
07600 (QASSERT (TUPLE $$S1 $A
07700 $$S2]
07800 B3
07900 (QATTEMPT (QMATCHQ (TUPLE ←←S1
08000 (TUPLE ←←NEXT)←←S2)
08100 $NEXT)
08200 THEN (GOTO B2)
08300 ELSE (GOTO B1])
08400
08500 (REV2ELS
08600 (QLAMBDA (TUPLE ←RELN
08700 ←A
08800 ←B)
08900 (QIF (QAND (QEQUAL (QGET $RELN PARTIAL)
09000 TRUE)
09100 (QEQUAL (QGET $RELN ANTISYM)
09200 TRUE))
09300 ELSE (QFAIL))
09400 (QATTEMPT (QEXISTS (TUPLE $RELN $B $A))
09500 ELSE (TRANSITIVECLOSURE (TUPLE $RELN $B $A)))
09600 (QEXISTS (TUPLE C $A ←ACON))
09700 (QEXISTS (TUPLE C $B ←BCON))
09800 (QGOAL (TUPLE SERIES (TUPLE C $A $BCON)
09900 (TUPLE C $B $ACON))
10000 APPLY $GOALTYPE)))
10100
10200 (CELLEQUAL
10300 (QLAMBDA (CLASS ←A
10400 ←B)
10500 (QAND (QATTEMPT (QEXISTS (TUPLE C $A ←VAL1)))
10600 (QATTEMPT (QEXISTS (TUPLE C $B ←VAL2)))
10700 (QEQUAL $VAL1 $VAL2))))
10800
10900 (LISTEQUAL
11000 [QLAMBDA (CLASS ←A
11100 ←B)
11200 (QPROG (←E1
11300 ←E2
11400 ←E3
11500 ←E4)
11600 (QATTEMPT (QMATCHQ (TUPLE ←E1
11700 ←←E2)
11800 $A)
11900 THEN (QMATCHQ (TUPLE ←E3
12000 ←←E4)
12100 $B)
12200 ELSE (QATTEMPT (QMATCHQ (TUPLE ←E3
12300 ←←E4)
12400 $B)
12500 THEN (QRETURN FALSE)
12600 ELSE (QRETURN TRUE)))
12700 (QIF (QAND (CELLEQUAL (CLASS $E1 $E3))
12800 (LISTEQUAL (CLASS $E2 $E4)))
12900 THEN (QRETURN TRUE)
13000 ELSE (QRETURN FALSE])
13100
13200 (REPLACECDR
13300 (QLAMBDA (TUPLE LIST ←L
13400 ←NEWCDR
13500 ←OLDCDR
13600 ←CAR)
13700 (QDELETE (TUPLE LIST $L (TUPLE $CAR $$OLDCDR)))
13800 (QASSERT (TUPLE LIST $L (TUPLE $CAR $$NEWCDR)))
13900 (QMATCHQ ←PGM
14000 (TUPLE (TUPLE COMMENT WE REPLACE CDR OF LIST $L
14100 WHICH WAS $OLDCDR BY $NEWCDR)
14200 (TUPLE RPLACD $NEWCDR $L)
14300 $$PGM))))
14400
14500 (REPLACECAR
14600 (QLAMBDA (TUPLE LIST ←L
14700 ←NEWCAR
14800 ←OLDCAR
14900 ←CDR)
15000 (QMATCHQ ←NEWLIST
15100 (TUPLE $NEWCAR $$CDR))
15200 (QMATCHQ ←OLDLIST
15300 (TUPLE $OLDCAR $$CDR))
15400 (QDELETE (TUPLE LIST $L $OLDLIST))
15500 (QASSERT (TUPLE LIST $L $NEWLIST))
15600 (QMATCHQ ←PGM
15700 (TUPLE (TUPLE COMMENT WE REPLACE CAR OF LIST $L
15800 WHICH WAS $OLDCAR
15900 BY THE CELL $NEWCAR)
16000 (TUPLE RPLACA $NEWCAR $L)
16100 $$PGM))))
16200
16300 (MAKENULL
16400 (QLAMBDA (TUPLE LIST ←L
16500 (TUPLE))
16600 (QATTEMPT (QEXISTS (TUPLE LIST $L ←ANY))
16700 THEN (QDELETE (TUPLE LIST $L $ANY)))
16800 (QASSERT (TUPLE LIST $L (TUPLE)))
16900 (QMATCHQ ←PGM
17000 (TUPLE (TUPLE COMMENT WE SET LIST $L TO NULL)
17100 (TUPLE SETQ $L NIL)
17200 $$PGM))))
17300
17400 (RPLAC
17500 [QLAMBDA (TUPLE LIST ←L
17600 (TUPLE ←CAR
17700 ←←CDR))
17800 (QEXISTS (TUPLE LIST $L (TUPLE ←←CURRENT)))
17900 (QMATCHQ (TUPLE ←CURCAR
18000 ←←CURCDR)
18100 $CURRENT)
18200 (QIF (LISTEQUAL (CLASS $CURCDR $CDR))
18300 THEN (REPLACECAR (TUPLE LIST $L $CAR $CURCAR $CDR))
18400 ELSE (QIF (CELLEQUAL (CLASS $CURCAR $CAR))
18500 THEN (REPLACECDR (TUPLE LIST $L $CDR $CURCDR $CAR)
18600 )
18700 ELSE (QFAIL])
18800
18900 (NEWCELL
19000 [QLAMBDA (TUPLE ←VAL
19100 ←LOC)
19200 (QPROG (←AUXLOC)
19300 (QMATCHQ (CLASS ←AUXLOC
19400 ←←UNUSEDVARS)
19500 $UNUSEDVARS)
19600 (QASSERT (TUPLE C $AUXLOC $VAL))
19700 (QMATCHQ ←PGM
19800 (TUPLE (TUPLE COMMENT I MAY NEED $VAL LATER
19900 SO BEFORE I STORE SOMETHING
20000 IN LOCATION $LOC I AM TRANSFERRING
20100 $VAL
20200 TO THE NEWLY CREATED LOCATION
20300 $AUXLOC)
20400 (TUPLE SETQ $AUXLOC $LOC)
20500 $$PGM])
20600
20700 (STORECVALUE
20800 [QLAMBDA ←LOC
20900 (QPROG (←VALU
21000 ←RESERVE)
21100 (QATTEMPT (QEXISTS (TUPLE C $LOC ←VALU))
21200 THEN (QATTEMPT (QBEXISTS
21300 (TUPLE C ←RESERVE
21400 $VALU)
21500 THEN (QIF (QEQUAL $RESERVE
21600 $LOC)
21700 THEN (QFAIL)
21800 ELSE (QPUT
21900 (TUPLE C
22000 $RESERVE
22100 $VALU)
22200 NEEDED TRUE)))
22300 ELSE (NEWCELL (TUPLE $VALU $LOC)))
22400 ELSE (QRETURN TRUE])
22500
22600 (CONSC
22700 [QLAMBDA
22800 (TUPLE LIST ←L
22900 (TUPLE ←CAR
23000 ←←CDR))
23100 (QPROG (←M
23200 ←S1
23300 ←S2)
23400 (QATTEMPT (QGOAL (TUPLE LIST $L $CDR)
23500 APPLY $GOALTYPE)
23600 THEN (QATTEMPT (QEXISTS (TUPLE LIST ←M
23700 (TUPLE ←←S1
23800 $CAR ←←S2)))
23900 THEN [QPROG (←M2
24000 ←T)
24100 (QMATCHQ ←T
24200 (GETNEWLOCNAME))
24300 (QDELETE (TUPLE LIST $L $CDR))
24400 (QMATCHQ ←M2
24500 (TUPLE $T $$CDR))
24600 (QASSERT (TUPLE LIST $L $M2))
24700 (QMATCHQ
24800 ←PGM
24900 (TUPLE (TUPLE COMMENT WE JUST
25000 TOOK THE NEW CELL
25100 $T
25200 AND CONSED IT ONTO $L
25300 SINCE $CAR ALREADY
25400 BELONGS
25500 TO ANOTHER LIST
25600 STRUCTURE NAMELY $M)
25700 (TUPLE SETQ $T $CAR)
25800 (TUPLE SETQ L
25900 (TUPLE CONS $T $L))
26000 $$PGM))
26100 (QATTEMPT (QEXISTS (TUPLE C $CAR
26200 ←M2))
26300 THEN (QASSERT (TUPLE C $T $M2]
26400 ELSE (QPROG (←TEMP)
26500 (QDELETE (TUPLE LIST $L $CDR))
26600 (QMATCHQ ←TEMP
26700 (TUPLE $CAR $$CDR))
26800 (QASSERT (TUPLE LIST $L $TEMP))
26900 (QMATCHQ ←PGM
27000 (TUPLE (TUPLE COMMENT WE
27100 JUST TOOK $CAR
27200 AND CONSED IT ONTO
27300 LIST $L)
27400 (TUPLE SETQ $L
27500 (TUPLE CONS
27600 $CAR $L))
27700 $$PGM])
27800
27900 (SETQC
28000 [QLAMBDA (TUPLE C ←NEWLOC
28100 ←NEWVAL)
28200 (QPROG (←OLDLOC
28300 ←LOC2
28400 ←V)
28500 (QATTEMPT (QEXISTS (TUPLE C $NEWLOC ←V)
28600 REQUIRED TRUE)
28700 THEN (QFAIL QPROG))
28800 (QATTEMPT (QEXISTS (TUPLE C ←OLDLOC
28900 $NEWVAL))
28903 ELSE (QPROG (←AUXLOC)
28905 (QMATCHQ $PGM (TUPLE ←←A (TUPLE COMMENT
28907 ←VOLD NO LONGER HAS THE VALUE $NEWVAL) (TUPLE ←←B)
28909 (TUPLE ←←C) ←←D))
28911 (QMATCHQ (CLASS ←AUXLOC ←←UNUSEDVARS) $UNUSEDVARS)
28913 (QASSERT (TUPLE C $AUXLOC $VAL))
28915 (QMATCHQ ←PGM (TUPLE $$A (TUPLE COMMENT $VOLD NO LONGER
28917 HAS THE VALUE $NEWVAL BUT SINCE WE WILL NEED IT LATER
28919 WE STORED $NEWVAL IN THE NEW AUXILLIARY CELL $AUXLOC)
28921 (TUPLE $$B) (TUPLE $$C) (TUPLE SETQ $AUXLOC $VOLD)
28923 $$D))))
29000 (QATTEMPT (QEXISTS (TUPLE C ←LOC2
29100 $NEWVAL)
29200 NEEDED TRUE)
29300 ELSE (QPUT (TUPLE C $OLDLOC $NEWVAL)
29400 NEEDED TRUE))
29500 (QEXISTS (TUPLE C ←OLDLOC
29600 $NEWVAL)
29700 NEEDED TRUE)
29900 (BUILDPGM (TUPLE $NEWLOC $NEWVAL $OLDLOC))
30000 (QDELETE (TUPLE C $NEWLOC ←V))
30100 (QASSERT (TUPLE C $NEWLOC $NEWVAL])
30200
30300 (TRANSITIVECLOSURE
30400 [QLAMBDA (TUPLE ←RELN
30500 ←A
30600 ←B)
30700 (QIF (QEQUAL (QGET (TUPLE $RELN TRANSITIVE))
30800 TRUE)
30900 ELSE (QFAIL))
31000 (QBEXISTS (TUPLE $RELN $A ←ANY)
31100 THEN (QIF (QEQUAL $ANY $B)
31200 THEN (QASSERT (TUPLE $RELN $A $B))
31300 ELSE (TRANSITIVECLOSURE (TUPLE $RELN $ANY $B])
31400
31500 (TRYANYTHINGANTISYMPARTIAL
31600 (QLAMBDA (TUPLE ←TYPE
31700 ←←STUFF
31800 (TUPLE ←RELN
31900 ←A
32000 ←B)←←STUFF2)
32100 (QIF (QAND (QGET $RELN ANTISYM)
32200 (QGET $RELN PARTIAL))
32300 ELSE (QFAIL))
32400 (QIF (QOR (QATTEMPT (QEXISTS (TUPLE $RELN $A $B))
32500 THEN (QNOTEQUAL (QGET (TUPLE $RELN $A $B)
32600 TEMP)
32700 TRUE))
32800 (QATTEMPT (QEXISTS (TUPLE $RELN $B $A))
32900 THEN (QNOTEQUAL (QGET (TUPLE $RELN $B $A)
33000 TEMP)
33100 TRUE)))
33200 THEN (QFAIL))
33300 (QMATCHQ ←PGM
33400 (TUPLE (TUPLE COMMENT IF $A $RELN $B
33500 THEN)
33600 (TUPLE COND (TUPLE $RELN $A $B))
33700 $$PGM))
33800 (QASSERT (TUPLE $RELN $A $B))
33900 (QPUT (TUPLE $RELN $A $B)
34000 TEMP TRUE)
34100 (QATTEMPT (QGOAL (TUPLE $TYPE $$STUFF (TUPLE $RELN $A $B)
34200 $$STUFF2)
34300 APPLY $GOALTYPE)
34400 ELSE (QMATCHQ ←PGM
34500 (TUPLE (TUPLE PRINT GIVEUP)
34600 $$PGM)))
34700 (QMATCHQ ←PGM
34800 (TUPLE (TUPLE COMMENT END OF THE
34900 THEN PART OF THE COND
35000 AND THUS BEGIN THE
35100 ELSE PART OF THE COND)
35200 (TUPLE (TUPLE T))
35300 $$PGM))
35400 (QDELETE (TUPLE $RELN $A $B))
35500 (QASSERT (TUPLE $RELN $B $A))
35600 (QPUT (TUPLE $RELN $B $A)
35700 TEMP TRUE)
35800 (QATTEMPT (QGOAL (TUPLE $TYPE $$STUFF (TUPLE $RELN $A $B)
35900 $$STUFF2)
36000 APPLY $GOALTYPE)
36100 ELSE (QMATCHQ ←PGM
36200 (TUPLE (TUPLE PRINT GIVEUP)
36300 $$PGM)))
36400 (QMATCHQ ←PGM
36500 (TUPLE (TUPLE COMMENT END OF COND EXPRESSION)
36600 $$PGM))
36700 (QDELETE (TUPLE $RELN $B $A))
36800 BACKTRACK))
36900
37000 (SIMPLEGOAL
37100 [QLAMBDA ←ANYTHING
37200 (QGOAL $ANYTHING APPLY $DO)
37300 (COND
37400 (REQUIRE (QPUT $ANYTHING REQUIRED TRUE])
37500
37600 (SOLVE
37700 (QLAMBDA ←PROBLEM
37800 (QGOAL $PROBLEM APPLY $GOALTYPE)
37900 (QMATCHQ ←PGM
38000 (QREVERSE $PGM))
38100 (QMATCHQ ←PGM
38200 (TUPLE (TUPLE COMMENT BEGINNING OF PROGRAM)
38300 $$PGM
38400 (TUPLE COMMENT END OF PROGRAM)))
38403 (PRINT $PGM)
38405 (PRINT "
38407
38409 LISP CODE ITSELF:
38411
38413
38415 ")
38417 (PURE $PGM)
38419 (TUPLE FINISHED THIS REQUEST)))
38500
38600 (SETUP
38700 (QLAMBDA ←ANYTHING
38800 (DENYALL)
38900 (QASSERT (TUPLE C A A3))
39000 (QASSERT (TUPLE C B B3))
39100 (QASSERT (TUPLE C C C3))
39200 (QASSERT (TUPLE C D D3))
39300 (QASSERT (TUPLE C E E3))
39400 (QASSERT (TUPLE C F F3))
39500 (QASSERT (TUPLE C G G3))
39600 (QASSERT (TUPLE C I I3))
39700 (QASSERT (TUPLE C J J3))
39800 (QASSERT (TUPLE C K K3))
39900 (QASSERT (TUPLE C H H3))
40000 (QASSERT (TUPLE LIST L1 (TUPLE)))
40100 (QASSERT (TUPLE LIST L2 (TUPLE)))
40200 (QASSERT (TUPLE LIST L3 (TUPLE)))
40300 (QASSERT (TUPLE LIST L4 (TUPLE A B C)))
40400 (QASSERT (TUPLE LIST L5 (TUPLE D E)))
40500 (QASSERT (TUPLE LESS I J))
40600 (QASSERT (TUPLE LESS J K))
40700 (QASSERT (TUPLE LESS H I))
40800 (QPUT LESS ANTISYM TRUE)
40900 (QPUT LESS PARTIAL TRUE)
41000 (QPUT LESS TRANSITIVE TRUE)
41100 (TUPLE SETUP COMPLETED)))
41200
41300 (INIT
41400 (QLAMBDA ←ANYTHING
41500 (QMATCHQ ←GOALTYPE
41600 (TUPLE ORGOAL ANDGOAL XORGOAL SERIESGOAL SIMPLEGOAL
41700 TRYANYTHINGANTISYMPARTIAL))
41800 (QMATCHQ ←DO
41900 (TUPLE SETQC RPLAC CONSC MAKENULL TRANSITIVECLOSURE
42000 REV2ELS))
42100 (QMATCHQ ←PGM
42200 (TUPLE))
42300 (QMATCHQ ←UNUSEDVARS
42400 (CLASS U1 U2 U3 U4 U5 U6 U7 U8 U9 U10 U11 U12 U13
42500 U14 U15 U16 U17))
42600 (QMATCHQ ←UNUSEDV
42700 $UNUSEDVARS)
42800 $ANYTHING))
42900
43000 (GETNEWLOCNAME
43100 (QLAMBDA ←ANYTHING
43200 (QPROG (←X)
43300 (QMATCHQ (CLASS ←X
43400 ←←UNUSEDVARS)
43500 $UNUSEDVARS)
43600 (QRETURN $X))))
43700
43800 (DENYALL
43900 [QLAMBDA ←ANYTHING
44000 (QATTEMPT (QDELETE (TUPLE C ←C1
44100 ←V1)))
44200 [QATTEMPT (QDELETE (TUPLE LIST ←L1
44300 (TUPLE ←←V1]
44400 (QATTEMPT (QDELETE (TUPLE LESS ←C1
44500 ←V1])
44600
44700 (SERIESGOAL
44800 (QLAMBDA (TUPLE SERIES ←Z1
44900 ←←Z2)
45000 (SETQ NEED NIL)
45100 (SETQ REQUIRE NIL)
45200 (QGOAL $Z1 APPLY $GOALTYPE)
45300 (QIF (QEQUAL $Z2 (TUPLE))
45400 THEN $PGM
45500 ELSE (QGOAL (TUPLE SERIES $$Z2)
45600 APPLY $GOALTYPE))))
45700
45800 (ORGOAL
45900 (QLAMBDA (CLASS OR ←Z1
46000 ←←Z2)
46100 (QATTEMPT (QGOAL $Z1 APPLY $GOALTYPE)
46200 THEN (QMATCHQ ←PGM
46300 (TUPLE (TUPLE COMMENT
46400 FROM THE ORTASK WE SHALL
46500 DO $Z1)
46600 $$PGM))
46700 ELSE (QGOAL (CLASS OR $$Z2)
46800 APPLY $GOALTYPE))))
46900
47000 (ANDGOAL
47100 [QLAMBDA (CLASS AND ←←Z)
47200 (QPROG (←Z1
47300 ←Z2
47400 ←Z3)
47500 (QMATCHQ ←Z3
47600 (CLASS))
47700 B1
47800 (QMATCHQ (CLASS ←Z1
47900 ←←Z2)
48000 $Z)
48100 (QMATCHQ ←Z3
48200 (CLASS $$Z3 $Z1))
48300 (QMATCHQ ←Z
48400 (CLASS $$Z2))
48500 (SETQ NEED T)
48600 (SETQ REQUIRE T)
48700 (QATTEMPT (QGOAL $Z1 APPLY $GOALTYPE)
48800 THEN (QIF (QEQUAL $Z2 (CLASS))
48900 THEN (QIF (QEQUAL $Z3 (CLASS))
49000 THEN $PGM
49100 ELSE (QGOAL (CLASS AND $$Z3)
49200 APPLY $GOALTYPE))
49300 ELSE (QGOAL (CLASS AND $$Z2)
49400 APPLY $GOALTYPE))
49500 ELSE (GO B1])
49600
49700 (XORGOAL
49800 (QLAMBDA (CLASS XOR ←Z1
49900 ←←Z2)
50000 (QATTEMPT (QGOAL $Z1 APPLY $GOALTYPE)
50100 THEN (QATTEMPT (QGOAL (CLASS NONEOF $$Z2)
50200 APPLY $GOALTYPE)
50300 THEN (QMATCHQ ←PGM
50400 (TUPLE (TUPLE COMMENT OF THE
50500 EXCLUSIVE
50600 OR GOAL WE DID $Z1
50700 AND NO OTHERS ARE
50800 SATISFIED)
50900 $$PGM)))
51000 ELSE (QGOAL (CLASS XOR $$Z2)
51100 APPLY $GOALTYPE))))
51200
51300 (BUILDPGM
51400 (QLAMBDA (TUPLE ←NEWLOC
51500 ←NEWVAL
51502 ←OV
51600 ←OLDLOC)
51700 (QMATCHQ ←PGM
51800 (TUPLE (TUPLE COMMENT I JUST TRANSFERRED THE VALUE
51900 $NEWVAL FROM CELL $OLDLOC
52000 TO CELL $NEWLOC)
52100 (TUPLE SETQ $NEWLOC $OLDLOC)
52200 $$PGM))
52202 (QATTEMPT (QEXISTS (TUPLE C $OLDLOC ←OV))
52204 THEN (QMATCHQ ←PGM (TUPLE (TUPLE COMMENT $OLDLOC
52206 NO LONGER HAS THE VALUE $OV) $$PGM)))))
52300 )
52400 (QSETUP PUPVARS)
52500 STOP